package proms.net.modelo.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import proms.net.conexao.Conexao;
import proms.net.modelo.bean.Cliente;
import proms.net.modelo.bean.ClienteProcesso;
import proms.net.modelo.bean.Endereco;
import proms.net.modelo.bean.Processo;

public class ClienteDAO implements InterfaceClienteDAO {

    private Conexao conexao;

    public void salvarCli(Cliente cliente) throws SQLException {
        try {
            Connection conexao2 = Conexao.conecta();
            PreparedStatement ps;
            String sqlInsert1 = "INSERT INTO usuario (usuario, senha,tipo_usuario,acessototal)"
                    + "VALUES  (?,?,?,?); ";
            ps = conexao2.prepareStatement(sqlInsert1);
            ps.setObject(1, cliente.getLogin());
            ps.setObject(2, cliente.getSenha());
            ps.setObject(3, cliente.getTipoUsuario());
            ps.setObject(4, cliente.getAcessoTotal());
            ps.executeUpdate();

            ps = conexao2.prepareStatement("select cod_usuario from usuario where usuario = ?");
            ps.setString(1, cliente.getLogin());
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                cliente.setCod_usuario(rs.getInt("cod_usuario"));
            }

            String sqlInsert2 = "INSERT INTO cliente (cod_usuario, nome,e_mail,fone_cel,fone_residencial,cpf, rg, profissao,nacionalidade,sexo, mae, est_civil,cnpj,"
                    + "inscricao_estadual) VALUES (?,?,?,"
                    + "?,?,?,?,?,?,?,?,?,?,?); ";

            ps = conexao2.prepareStatement(sqlInsert2);

            ps.setInt(1, cliente.getCod_usuario());
            ps.setString(2, cliente.getNome());
            ps.setString(3, cliente.getEmail());
            ps.setString(4, cliente.getFoneCel());
            ps.setString(5, cliente.getFoneResidencia());
            ps.setString(6, cliente.getCpf());
            ps.setString(7, cliente.getRg());
            ps.setString(8, cliente.getProfissao());
            ps.setString(9, cliente.getNacionalidade());
            ps.setString(10, cliente.getSexo());
            ps.setString(11, cliente.getMae());
            ps.setString(12, cliente.getEstadoCivil());
            ps.setString(13, cliente.getCnpj());
            ps.setString(14, cliente.getInscricaoEstadual());

            ps.executeUpdate();

            ps = conexao2.prepareStatement("select cod_cliente from cliente where cpf = ?");
            ps.setString(1, cliente.getCpf());
            rs = ps.executeQuery();
            while (rs.next()) {
                cliente.getEndereco().setCodCliente(rs.getInt("cod_cliente"));
            }

            String sqlInsert = "INSERT INTO endereco (cod_cliente,rua,bairro,numero,cep,cidade,uf,pais) VALUES (?,?,?,"
                    + "?,?,?,?,?); ";

            ps = conexao2.prepareStatement(sqlInsert);

            ps.setObject(1, cliente.getEndereco().getCodCliente());
            ps.setObject(2, cliente.getEndereco().getRua());
            ps.setObject(3, cliente.getEndereco().getBairro());
            ps.setObject(4, cliente.getEndereco().getNumero());
            ps.setObject(5, cliente.getEndereco().getCep());
            ps.setObject(6, cliente.getEndereco().getCidade());
            ps.setObject(7, cliente.getEndereco().getUf());
            ps.setObject(8, cliente.getEndereco().getPais());
            ps.executeUpdate();

            ps.close();
        } finally {
            Conexao.desconecta();

        }
    }

    


    
    public void atualizar(Cliente cliente, Endereco endereco) throws SQLException {

        try {
            Connection con = conexao.conecta();
		PreparedStatement ps = null;



            String sqlInsert2 = "UPDATE cliente set nome = ?,e_mail = ?,fone_cel = ?,fone_residencial = ?,cpf = ?, rg = ?, profissao = ?,nacionalidade = ?,sexo = ?, mae = ?, est_civil = ?,cnpj = ?,"
                    + "inscricao_estadual =  ?  where cod_cliente = ?; ";

            ps = con.prepareStatement(sqlInsert2);

            ps.setString(1, cliente.getNome());
            ps.setString(2, cliente.getEmail());
            ps.setString(3, cliente.getFoneCel());
            ps.setString(4, cliente.getFoneResidencia());
            ps.setString(5, cliente.getCpf());
            ps.setString(6, cliente.getRg());
            ps.setString(7, cliente.getProfissao());
            ps.setString(8, cliente.getNacionalidade());
            ps.setString(9, cliente.getSexo());
            ps.setString(10, cliente.getMae());
            ps.setString(11, cliente.getEstadoCivil());
            ps.setString(12, cliente.getCnpj());
            ps.setString(13, cliente.getInscricaoEstadual());
            ps.setInt(14, cliente.getCod_cliente());

            ps.executeUpdate();

          String sqlInsert = "UPDATE endereco set rua = ? ,bairro = ?,numero = ?,cep = ?,cidade = ?,uf = ?,pais = ?  where cod_cliente= ? ";

            ps = con.prepareStatement(sqlInsert);


            ps.setObject(1, cliente.getEndereco().getRua());
            ps.setObject(2, cliente.getEndereco().getBairro());
            ps.setObject(3, cliente.getEndereco().getNumero());
            ps.setObject(4, cliente.getEndereco().getCep());
            ps.setObject(5, cliente.getEndereco().getCidade());
            ps.setObject(6, cliente.getEndereco().getUf());
            ps.setObject(7, cliente.getEndereco().getPais());
            ps.setObject(8, cliente.getEndereco().getCodCliente());
            ps.executeUpdate();

            ps.close();
        } finally {
            Conexao.desconecta();

        }
    }

    public Cliente getCliente(Integer cod_cliente)throws SQLException {
       Connection con = conexao.conecta();
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sqlSelect = "SELECT * FROM endereco inner join cliente on endereco.cod_cliente = cliente.cod_cliente   WHERE cliente.cod_cliente = ?;";

		try {
			ps = con.prepareStatement(sqlSelect);
			ps.setInt(1, cod_cliente);

			rs = ps.executeQuery();

			List<Cliente> resultado = getListaCliente(rs);
			if(resultado.size() > 0)
				return resultado.get(0);

			ps.close();
		} finally {
			conexao.desconecta();
		}
		return null;
    }
    private List<Cliente> getListaCliente(ResultSet rs) throws SQLException
	{
		List<Cliente> resultado = new ArrayList<Cliente>();
		while(rs.next())
		{
			Cliente cliente = new Cliente();
                        Processo processo = new Processo();
                        cliente.setCod_cliente(rs.getInt("cod_cliente"));
			cliente.setNome(rs.getString("nome"));
			cliente.setEmail(rs.getString("e_mail"));
			cliente.setFoneCel(rs.getString("fone_cel"));
			cliente.setFoneResidencia(rs.getString("fone_residencial"));
			cliente.setCpf(rs.getString("cpf"));
			cliente.setRg(rs.getString("rg"));
			cliente.setSexo(rs.getString("sexo"));
			cliente.setProfissao(rs.getString("profissao"));
			cliente.setNascimento(rs.getString("nascimento"));
			cliente.setNacionalidade(rs.getString("nacionalidade"));
			cliente.setMae(rs.getString("mae"));
			cliente.setEstadoCivil(rs.getString("est_civil"));
			cliente.setCnpj(rs.getString("cnpj"));
			cliente.setInscricaoEstadual(rs.getString("inscricao_estadual"));
                        cliente.getEndereco().setBairro(rs.getString("bairro"));
                        cliente.getEndereco().setCep(rs.getString("cep"));
                        cliente.getEndereco().setCidade(rs.getString("cidade"));
                        cliente.getEndereco().setCodCliente(rs.getInt("cod_cliente"));
                        cliente.getEndereco().setCodEndereco(rs.getInt("cod_end"));
                        cliente.getEndereco().setNumero(rs.getInt("numero"));
                        cliente.getEndereco().setPais(rs.getString("pais"));
                        cliente.getEndereco().setRua(rs.getString("rua"));
                        cliente.getEndereco().setUf(rs.getString("uf"));

			resultado.add(cliente);
		}
		return resultado;
	}
    
  
}
